const { exec } = require('node:child_process');
const path = require('path');
const fs = require('fs-extra');

console.log('🚀 开始打包应用...');
// 创建后端的开发环境标记文件
fs.writeFileSync('backend/.env', 'ENV=production');


// 构建前端
console.log('🔨 构建前端应用开始...');

const frontendPath = path.join(__dirname, '../frontend');
console.log(`前端应用frontendPath: ${frontendPath}`);

exec('npm run build', { cwd: frontendPath }, (error, stdout, stderr) => {
  if (error) {
    console.error(`前端构建失败: ${error.message}`);
    return;
  }
  console.log(`前端构建成功！`);

  console.log(`🔨 构建应用包开始...`);
  // 打包桌面应用

  // 修改app-config.json中的debug为true
    try {
      const configPath = path.join(__dirname, "../app-config.json");
      const config = JSON.parse(fs.readFileSync(configPath, "utf8"));
      config.app.window.debug = false;
      fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
      console.log("✅ 已将app-config.json中的debug设置为true");
    } catch (err) {
      console.error(`❌ 修改app-config.json失败: ${err.message}`);
      return;
    }

  // 读取应用配置
  const configPath = path.join(__dirname, '../app-config.json');
  let appName = 'DeskApp';
  let icon = 'logo.ico';
  
  try {
      const configData = fs.readFileSync(configPath, 'utf8');
      const config = JSON.parse(configData);
      appName = config.app.build.name || appName;
      icon = config.app.build.icon || icon;
  } catch (error) {
      console.error(`读取配置文件失败: ${error.message}`);
  }

  // 构建打包命令 - 移除data目录的打包，让日志独立存在
  const pyInstallerCmd = `pyinstaller --onefile --windowed --name ${appName} --add-data "frontend/dist;frontend/dist" --add-data "backend/.env;backend" --add-data "backend;backend" --icon ${icon} --clean main.py`;
  
  exec(pyInstallerCmd,
      (pyError, pyStdout, pyStderr) => {
      if (pyError) {
        console.error(`打包失败: ${pyError.message}`);
        return;
      }
      console.log(pyStdout);
      console.log('✅ 应用打包完成！');
      console.log('📁 应用位于 dist/ 目录');

    }
  );
});